package com.ruoyi.system.service.impl;

import cn.hutool.core.util.IdUtil;
import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.common.core.utils.SecurityUtils;
import com.ruoyi.system.api.domain.SysFile;
import com.ruoyi.system.mapper.SysFileMapper;
import com.ruoyi.system.service.ISysFileService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.Arrays;
import java.util.List;

/**
 * 上传的文件统一管控
 * 文件Service业务层处理
 *
 * @author cjie
 * @date 2021-06-30
 */
@Service
public class SysFileServiceImpl implements ISysFileService {
    @Autowired
    private SysFileMapper sysFileMapper;
    @Resource
    private FileUploadService fileUploadService;

    /**
     * 查询文件
     *
     * @param id 文件ID
     * @return 文件
     */
    @Override
    public SysFile selectSysFileById(Long id) {
        return sysFileMapper.selectSysFileById(id);
    }

    /**
     * 查询文件列表
     *
     * @param sysFile 文件
     * @return 文件
     */
    @Override
    public List<SysFile> selectSysFileList(SysFile sysFile) {
        return sysFileMapper.selectSysFileList(sysFile);
    }

    /**
     * 通过linkId获取附件
     *
     * @param linkId 关联id
     * @return
     */
    @Override
    public List<SysFile> selectSysFileByLinkId(String linkId) {
        return sysFileMapper.selectSysFileByLinkId(linkId);
    }

    /**
     * 新增文件
     *
     * @param sysFile 文件
     * @return 结果
     */
    @Override
    public int insertSysFile(SysFile sysFile) {
        sysFile.setId(IdUtil.getSnowflake(0, 0).nextId());
        sysFile.setCreateTime(DateUtils.getNowDate());
        sysFile.setCreateBy(SecurityUtils.getUsername());
        return sysFileMapper.insertSysFile(sysFile);
    }

    /**
     * 修改文件
     *
     * @param sysFile 文件
     * @return 结果
     */
    @Override
    public int updateSysFile(SysFile sysFile) {
        return sysFileMapper.updateSysFile(sysFile);
    }

    /**
     * 批量删除文件
     *
     * @param ids 需要删除的文件ID
     * @return 结果
     */
    @Override
    public int deleteSysFileByIds(Long[] ids) {
        Arrays.stream(ids).forEach(id->{
            SysFile sysFile = sysFileMapper.selectSysFileById(id);
            fileUploadService.delete(sysFile.getPathKey());
        });
        return sysFileMapper.deleteSysFileByIds(ids);
    }

    /**
     * 批量删除文件(内部使用)
     *
     * @param linkId
     * @return
     */
    @Override
    public int deleteSysFileByLinkId(String linkId) {
        SysFile sysFile = new SysFile();
        sysFile.setLinkId(linkId);
        List<SysFile> sysFileList = sysFileMapper.selectSysFileList(sysFile);
        sysFileList.forEach(file->{
            fileUploadService.delete(file.getPathKey());
            sysFileMapper.deleteSysFileById(file.getId());
        });
        return 1;
    }

    /**
     * 删除文件信息
     *
     * @param id 文件ID
     * @return 结果
     */
    @Override
    public int deleteSysFileById(Long id) {
        return sysFileMapper.deleteSysFileById(id);
    }
}
